package com.chenfan.mcn.utils;

import cn.hutool.core.collection.CollectionUtil;
import com.chenfan.common.vo.UserVO;
import com.chenfan.mcn.extension.mybatisplus.BaseAssembler;
import com.chenfan.mcn.model.base.BaseEntity;
import com.chenfan.mcn.model.base.BaseSaveEntity;
import org.springframework.beans.BeanUtils;

import java.util.Date;
import java.util.List;

/**
 * 基础实体类组装工具
 *
 * @author wulg
 * @date 2022-03-21
 **/
public class BaseAssemblerUtil {
    /**
     * 新增通用信息set
     *
     * @param entity 请求参数
     * @param user   请求参数
     */
    public static void insertFill(BaseEntity entity, UserVO user) {
        entity.setCreateBy(user.getUserId());
        entity.setCreateName(user.getRealName());
        entity.setCreateDate(new Date());
        entity.setCompanyId(user.getCompanyId());
        entity.setTenantId(user.getTenantId());
        entity.setDepartmentId(user.getDepartmentId());
        updateFill(entity, user);
    }

    /**
     * 更新通用信息set
     *
     * @param entity 请求参数
     * @param user   请求参数
     */
    public static void updateFill(BaseSaveEntity entity, UserVO user) {
        entity.setUpdateBy(user.getUserId());
        entity.setUpdateName(user.getRealName());
        entity.setUpdateDate(new Date());
    }

    /**
     * 更新通用信息set
     *
     * @param entityList 请求参数
     * @param user   请求参数
     */
    public static void batchUpdateFill(List<? extends BaseSaveEntity> entityList, UserVO user) {
        if(CollectionUtil.isNotEmpty(entityList)) {
            entityList.forEach(e -> {
                e.setUpdateBy(user.getUserId());
                e.setUpdateName(user.getRealName());
                e.setUpdateDate(new Date());
            });
        }
    }

    /**
     * 复制（忽略）
     * @param t
     * @param s
     * @param <S>
     * @param <T>
     * @return
     */
    public static <S extends BaseAssembler, T extends BaseAssembler> T copyIgnoreBase(S s, T t) {
        BeanUtils.copyProperties(s, t);
        t.ignore();
        return t;
    }
}
